/*
 * 版权所有 (C) 2015 知启蒙(ZHIQIM) 保留所有权利。
 * 
 * 欢迎到知启蒙网站（https://www.zhiqim.com）购买正版软件，知启蒙还提供许多开源框架和软件。
 * 
 * 1、本软件产品所有源代码受《中华人民共和国著作权法》和其他有关法律、法规的保护，其所有知识产权归湖南知启蒙科技有限公司所有；
 * 2、禁止复制和修改。不得复制修改、翻译或改编本软件所有源代码，或者基于本软件产品创作衍生作品；
 * 3、禁止进行逆向工程。不得对本软件的源代码进行逆向工程、反编译或试图以其他方式发现软件的源代码；
 * 4、个别授权：如需进行商业性的销售、复制、分发，包括但不限于软件销售、预装、捆绑等，必须获得知启蒙的书面授权和许可；
 * 5、保留权利：本注释未明示授权的其他一切权利仍归知启蒙所有，任何人使用其他权利时必须获得知启蒙的书面同意。
*/
package net.redxyz.repost.resource.action;

import net.redxyz.repost.resource.SessionUser;
import net.redxyz.repost.service.dao.UserDao;
import net.redxyz.top.TaobaoService;
import net.redxyz.top.data.vas.ArticleUserSubscribe;
import net.redxyz.top.dbo.user.User;
import net.redxyz.top.message.shop.ShopSellerGetResponse42908_2;
import net.redxyz.top.message.user.UserSellerGetResponse1_21349;

import org.zhiqim.httpd.HttpRequest;
import org.zhiqim.httpd.context.core.Action;
import org.zhiqim.kernel.logging.Log;
import org.zhiqim.kernel.logging.LogFactory;
import org.zhiqim.kernel.util.DateTimes;
import org.zhiqim.orm.dbo.Updater;

/**
 * 登录到首页后刷新用户其他数据
 * 1.查订购关系
 * 2.查店铺信息
 * 3.查用户信息
 * 4.查宝贝数目
 *
 * @version v1.0.0 @author zouzhigang 2014-3-21 新建与整理
 */
public class RefreshAction implements Action
{
    private static final Log log = LogFactory.getLog(RefreshAction.class);
    
    public void execute(HttpRequest request) throws Exception
    {
        //第一步，判断是否本次登录时已更新
        SessionUser sessionUser = request.getSessionUser(SessionUser.class);
        if (sessionUser != null)
            sessionUser.doRefreshUserInfo();
        
        if (sessionUser == null || sessionUser.isUpdateData())
            return;
       
        sessionUser.setUpdateData(true);
        
        //后台更新数据
        User user = sessionUser.getUser();
        String nick = sessionUser.getNick();
        String sessionId = sessionUser.getSessionId();
        
        //第二步，检查订购关系
        ArticleUserSubscribe order = UserDao.getUserOrder(nick, 5);
        switch (order.getStatus())
        {
            case ArticleUserSubscribe.UNKNOWN:
            {
                log.error("查询用户订购关系失败:["+nick+"]，下次重试");
                break;
            }
            case ArticleUserSubscribe.EXPIRE:
            {
                log.error("查询用户订购关系失败:["+nick+"]，用户已到期或会话店铺不存在");
                return;//不再作下面的操作
            }
            case ArticleUserSubscribe.SUCCESS:
            {//成功
                int versionNo = order.getVersionNo();
                String endDate = order.getEndDate();
                
                user.setVersionNo(versionNo);
                user.setEndDate(endDate);
                
                UserDao.updateUserVersion(nick, versionNo, endDate);
                if(sessionUser.isPopup() && DateTimes.compareDay(endDate, DateTimes.getDateString()) > 20)
                {//如果到期时间大于20天(刚续费需要关闭弹出窗口)
                    sessionUser.setClosePopup();
                }
            }
        }
        
        //第三步，查询客户店铺信息
        boolean hasShopUpdate = false;
        ShopSellerGetResponse42908_2 shopResp = TaobaoService.getShopService().getShopSeller(nick, sessionId);
        if (!shopResp.isSuccess())
            log.error("查询店铺信息失败:["+nick+"]," + shopResp.toString());
        else
        {
            user.setShopId(shopResp.getSid());
            user.setShopPic(shopResp.getPicPath());
            user.setShopTitle(shopResp.getTitle());
            
            hasShopUpdate = true;
        }
        
        //第四步，查询用户等级等数据
        boolean hasUserUpdate = false;
        UserSellerGetResponse1_21349 userResp = TaobaoService.getUserService().getUserSeller(nick, sessionId);
        if (!userResp.isSuccess())
            log.error("查询用户信息失败:["+nick+"]," + userResp.toString());
        else
        {
            user.setType(userResp.getType());
            user.setAutoRepostLimited(userResp.isAutoRepostLimited()?1:0);
            user.setAvatar(userResp.getAvatar());
            user.setLevel(userResp.getSellerLevel());

            hasUserUpdate = true;
        }
        
        //第五步，检查用户宝贝数目，用于版本检查和限制
        boolean hasNumUpdate = false;
        int num = TaobaoService.getItemService().getAllOnsaleItemsNum(nick, sessionId);
        if (num != -1)
        {
            user.setItemNum(num);
            hasNumUpdate = true;
        }
        
        //第六步，有数据则统一更新，否则退出
        if (!hasShopUpdate && !hasUserUpdate && !hasNumUpdate)
            return;
        
        Updater updater = new Updater();
        updater.addMust("nick", nick);
        if (hasShopUpdate)
        {
            updater.addField("shopId", user.getShopId());
            updater.addField("shopPic", user.getShopPic());
            updater.addField("shopTitle", user.getShopTitle());
        }
        
        if (hasUserUpdate)
        {
            updater.addField("type", user.getType());
            updater.addField("autoRepostLimited", user.getAutoRepostLimited());
            updater.addField("birthday", user.getBirthday());
            updater.addField("avatar", user.getAvatar());
            updater.addField("level", user.getLevel());
        }
        
        if (hasNumUpdate)
        {
            updater.addField("itemNum", user.getItemNum());
        }
        
        UserDao.updateUser(nick, updater);
    }
}
